/******************************************************************************
 * @brief    音频数据采样管理
 *
 * Copyright (c) 2013~2020, <morro_luo@163.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Chovere Logs:
 * Date           Author       Notes
 * 2013-05-04     Morro        初版
 * 2020-10-20     Morro        优化排版结构以及描述
 ******************************************************************************/
#include "audio_sample.h"
#include "adc.h"


/*音频数据采样器 -------------------------------------------------------------*/
typedef struct {
    bool            firstSampler;                             //首次采样标志
    bool            completed;                                //本次采样完成标志
    unsigned short *base;                                     //数据基地址
    unsigned int    size;                                     //采样数据长度
}audio_sampler_t;

static audio_sampler_t sampler;


/*
 * @brief       音频采样初始化
 * @param[in]   base - 数据基地址
 * @param[in]   size - 采样数据长度
 * @param[in]   rate - 采样频率(hz)
 * @return      none
 */
void audio_sample_init(unsigned short *base, int size)
{
    sampler.base = base;
    sampler.size = size;
}

/*
 * @brief       启动音频采样
 * @return      none
 */
void audio_sample_start(void)
{
    sampler.completed = false;
    while(HAL_ADC_Start_DMA(&hadc1, (uint32_t*)sampler.base, sampler.size)!=HAL_OK);
}

/*
 * @brief       判断是否采样完成
 * @return      bool
 */
bool audio_sample_completed(void)
{
    return sampler.completed;
}

/*
 * @brief       停止音频采样
 * @return      none
 */
void audio_sample_stop(void)
{
    HAL_ADC_Stop_DMA(&hadc1);
    sampler.completed = true;
    sampler.firstSampler = true;
}

